#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void handler(int sig) {
    printf("\nReceived SIGINT! Cleaning up...\n");
    // 执行清理操作（如关闭文件、释放资源）
    exit(0);
}
void advanced_handler(int sig, siginfo_t *info, void *context) {
    printf("Signal %d from PID: %d\n", sig, info->si_pid);
    exit(0);
}

int main() {
    // struct sigaction act;
    // act.sa_handler = handler;   // 设置处理函数
    // sigemptyset(&act.sa_mask);  // 清空阻塞信号集
    // act.sa_flags = 0;           // 无特殊标志

    // // 注册 SIGINT 处理
    // if (sigaction(SIGINT, &act, NULL) == -1) {
    //     perror("sigaction");
    //     exit(1);
    // }


  // 注册高级处理函数
   struct sigaction act2;
   act2.sa_sigaction = advanced_handler;
   act2.sa_flags = SA_SIGINFO; // 必须设置此标志
   sigemptyset(&act2.sa_mask);
   sigaction(SIGINT, &act2, NULL);

    printf("Press Ctrl+C to test...\n");
    while(1) pause(); // 等待信号
    return 0;
}

